package com.youka.bussiness.common.utils;

import com.youka.bussiness.common.base.BaseException;
import sun.misc.BASE64Encoder;

import javax.imageio.ImageIO;
import java.awt.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/*********************************
 * 文件名称: ImagUtil.java
 * 功能说明: 图片工具类 
 * 开发人员：liujinliang
 * 开发时间：2018/3/9 10:43
 *********************************/
public class ImagUtil {


    /**
     * 获取图片的属性
     *
     * @param input 图片流
     * @return
     */
    public static Map<String, Integer> checkImage(InputStream input) {
        Map<String, Integer> imageMap = new HashMap<String, Integer>();
        try {
            Image image = ImageIO.read(input);

            //图片的宽
            int width = image.getWidth(null);

            //图片的高
            int height = image.getHeight(null);

            //图片的大小
            imageMap.put("W", width);
            imageMap.put("H", height);
        } catch (IOException e) {
            throw new BaseException("IMG00001", "获取图片属性发生异常");
        }
        return imageMap;
    }

    /**
     * 网上图片转base64
     *
     * @param imgURL
     * @return
     */
    public static String imgBase64(String imgURL) {
        ByteArrayOutputStream outPut = new ByteArrayOutputStream();
        byte[] data = new byte[1024];
        try {
            // 创建URL
            URL url = new URL(imgURL);
            // 创建链接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(10 * 1000);

            if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                return "fail";//连接失败/链接失效/图片不存在
            }
            InputStream inStream = conn.getInputStream();
            int len = -1;
            while ((len = inStream.read(data)) != -1) {
                outPut.write(data, 0, len);
            }
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(outPut.toByteArray());
    }


    /**
     * 压缩图片
     *
     * @param request
     * @return
     * @throws IOException
     */
    //    public static File thumbnails(MultipartRequest request) {
    //        try {
    //            //获取文件
    //            MultipartFile upFile = request.getFile("image");
    //
    //            //创建源文件夹
    //            File sourceCatalog = new File("/home/sourceImage/");
    //            if (!sourceCatalog.exists()) {
    //                sourceCatalog.mkdirs();
    //            }
    //
    //            String fileName = upFile.getOriginalFilename();
    //            String suffixName = fileName.substring(fileName.lastIndexOf("."));
    //
    //
    //            //创建源文件
    //            final File sourceFile = new File("/home/sourceImage/" + EnveUtil.getUuid() + suffixName);
    //            if (!sourceFile.exists()) {
    //                sourceFile.createNewFile();
    //            }
    //
    //            //创建目标文件夹
    //            File targetCatalog = new File("/home/targetImage/");
    //            if (!targetCatalog.exists()) {
    //                targetCatalog.mkdirs();
    //            }
    //
    //            //创建目标文件
    //            final File targetFile = new File("/home/targetImage/" + EnveUtil.getUuid() + suffixName);
    //            if (!targetFile.exists()) {
    //                targetFile.createNewFile();
    //            }
    //            upFile.transferTo(sourceFile);
    //            Thumbnails.of(sourceFile).scale(1f).outputQuality(0.85f).toFile(targetFile);
    //
    //            //异步删除文件
    //            service.schedule(new Runnable() {
    //                public void run() {
    //                    sourceFile.delete();
    //                    targetFile.delete();
    //                }
    //            }, 60, TimeUnit.SECONDS);
    //            return targetFile;
    //        } catch (IOException e) {
    //            LOGGER.warnMessage("图片压缩发生异常", e);
    //            return null;
    //        }
    //    }
}